#ifndef ASTAR_H
#define ASTAR_H

#include <vector>
#include <iostream>
#include <queue>
#include <cmath>
#include <climits>

struct node {
    int closed_list = 0;
    int ans=0;
    int open_list=0;
    int za; // 地图值
    int x; // x坐标
    int y; // y坐标
    node* parent = nullptr; // 父节点指针
    int dj = INT_MAX; // 启发函数值，初始化为无穷大
    int zs = INT_MAX; // 实际代价，初始化为无穷大
    bool operator<(const node& y) const {
        return dj > y.dj; // const不可少
    }
};

class astar {
public:
    astar();
    void init();
    void out();
    void search();
    int djh(const node& x) const;
    void mapout();
private:
    std::vector<std::vector<node>> map;
    node *start;
    node *final;
};

#endif // ASTAR_H
